home *** CD-ROM | disk | FTP | other *** search
/ Shareware Super Platinum 8 / Shareware Super Platinum 8.iso / mac / PROGTOOL / DOCZ16.ZIP;1 / DOCZ.LIF / DELSTR.ASM < prev    next >
Encoding:
Assembly Source File  |  1994-04-24  |  2.4 KB  |  99 lines

  1. ifdef DOCUMENTATION
  2. ; ****************************** DOCZ Header *********************************
  3. .MODULE       delstr
  4. .LIBRARY      csub
  5. .TYPE          function
  6. .APPLICATION      string
  7. .SYSTEM       msdos-s
  8. .SYSTEM       msdos-l
  9. .SYSTEM       vms
  10. .SYSTEM       unix
  11. .AUTHOR       Software Toolz
  12. .DESCRIPTION
  13.    Deletetion of characters within a string
  14. .ARGUMENTS
  15.    char  *delstr(str,pos,len)
  16.       char  *str;    /* (r/w) input/output string */
  17.       int   pos,    /* (r) index to start deletion */
  18.         len;    /* (r) no. of characters to delete */
  19. .NARRATIVE
  20.    Delete "len" characters from "str", starting at "pos".  Deletion is 
  21.    done in place (no buffer req'd).
  22. .LANGUAGE
  23.    MSDOS small model & VMS, Assembly; all others, C
  24. .RETURNS
  25.    A pointer to your string.
  26. .EXAMPLE
  27.    char  buff[128];
  28.    strcpy(buff,"this is a poor test");
  29.    delstr(buff,10,5);
  30. .REVISIONS       1/28/87
  31.    Add return pointer to string instead of "void" (and rewrite in Assembly).
  32. .NOTICE
  33.    Copyright 1989 Software Toolz, Inc. - Atlanta, Georgia
  34.  
  35.    All rights reserved worldwide.  This program may not be reproduced,
  36.    transmitted, transcribed, stored in a retrieval system or translated in
  37.    any human or computer language, in any form without the express written
  38.    permission of Software Toolz, Inc.
  39. .ENDOC           END DOCUMENTATION
  40. ; ***************************************************************************
  41. endif
  42.  
  43.     INCLUDE C.MAC        ; symbols and macros for Microsoft
  44.  
  45. SFRAME    STRUC
  46.     SAV_SI    DW    ?
  47.     SAV_DI    DW    ?
  48.     SAV_ES    DW    ?
  49.     REG_BP    DW    ?        ; base pointer to be pushed
  50.     RTN_ADD DW    ?        ; offset of return address
  51.     STR    DW    ?
  52.     POS    DW    ?
  53.     LEN    DW    ?
  54. SFRAME    ENDS
  55.  
  56. ; ***************************************************************************
  57. ; code
  58. ; ***************************************************************************
  59.     PSEG                ; begin program section
  60.  
  61.     CFEXT    strlen
  62.     CFUN    delstr
  63.  
  64.     PUSH    BP
  65.     PUSH    ES
  66.     PUSH    DI
  67.     PUSH    SI
  68.     MOV    BP,SP
  69.     MOV    AX,DS
  70.     MOV    ES,AX
  71.  
  72.     MOV    AX,[BP].STR        ; calculate address of last string
  73.     ADD    AX,[BP].POS
  74.     ADD    AX,[BP].LEN
  75.     PUSH    AX
  76.     CCALL    strlen            ; find length of last string
  77.     MOV    SP,BP
  78.     MOV    CX,AX
  79.     INC    CX            ; include NULL
  80.  
  81.     CLD
  82.     MOV    SI,[BP].STR        ; get string address
  83.     ADD    SI,[BP].POS        ; calculate destination address
  84.     MOV    DI,SI
  85.     ADD    SI,[BP].LEN        ; calculate source address
  86.     REP MOVSB            ; do the copy
  87.  
  88.     MOV    AX,[BP].STR        ; copy string address for return
  89.  
  90.     POP    SI
  91.     POP    DI
  92.     POP    ES
  93.     POP    BP
  94.     RET
  95.  
  96.     CFEND    delstr
  97.     ENDPS                ; end program section
  98.     END
  99.